<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of productoClass
 *
 * @author Cesar
 */
class productoClass {
    
   public function listadoProducto($descripcion="",$estado="")
   {
        $criteria = new Criteria();
        if($descripcion!="")
        {
           $criteria->add(ProductoPeer::DESCRIPCION,'%'.$descripcion.'%',  Criteria::LIKE);
        }        
        if($estado!="none")
        {
           $criteria->add(ProductoPeer::ESTADO,'%'.$estado.'%',  Criteria::LIKE);
        }
        return $criteria;
    } 
    
    
   public function grabarProducto($arrayParam)
   {
      $arrayRespuesta =  array("success"=>false,"mensaje"=>"Error al grabar Producto","objecto"=>null,"code"=>602);
        try 
        {
               
                $coneccion   = Propel::getConnection();
                $coneccion->beginTransaction();
                $producto = new Producto();
                
                
                $codigo = $this->generarCodigoProducto($arrayParam['agenciaId']);
                $producto->setCodigo($codigo);
                $producto->setAgenciaId($arrayParam['agenciaId']);
                $producto->setDescripcion($arrayParam['descripcion']);
                $producto->setClienteId($arrayParam['clienteId']);                
                $producto->setItemAutogetionable($arrayParam['itemComisionAuto']);
                $producto->setItemComision($arrayParam['ckComision']);
                $producto->setCkComisionAutogestionable($arrayParam['ckComisionAuto']);      
                $producto->setItemPorcentaje($arrayParam['itemPorcentaje']);
                $producto->setSeFactura($arrayParam['seFactura']);
                $producto->setItemFee($arrayParam['itemFee']);
                $producto->setCkComisionTradicional($arrayParam['ckComisionTradicional']);
                $producto->setComisionTradicional($arrayParam['txtComisionTrad']);
                $producto->setComisionAutogestionable($arrayParam['txtComisionAuto']);
                $producto->setValorFee($arrayParam['valorFee']);
                $producto->setMonedaId($arrayParam['monedaId']);
                $producto->setTcRef($arrayParam['tref']);
                $producto->setCostoClic($arrayParam['costoClic']);
                $producto->setHoras($arrayParam['horas']);
                $producto->setCostoVista($arrayParam['costoVista']);
                $producto->setCostoMilImpresiones($arrayParam['costoMilImpresiones']);
                $producto->setPatrocinio($arrayParam['patrocinio']);
                $producto->setCostoPlead($arrayParam['costoPlead']);
                $producto->setCostoPa($arrayParam['costoPa']);
                $producto->setEstado(1);
                $producto->save();
                $this->insertarContratoDetalle($producto->getId());
                $coneccion->commit();   
                $arrayRespuesta['success'] = true;                       
                $arrayRespuesta['mensaje']  = "Exito";
                Propel::close();
        }
        catch (Exception $exc) 
        {

              $coneccion->rollBack();
              Propel::close();
              $arrayRespuesta['mensaje'] = $exc->getMessage();
              $arrayRespuesta['code']    = 601;
              print_r($exc->getMessage());
              return $arrayRespuesta;
        }

         return $arrayRespuesta;  
   }

   public function insertarContratoDetalle($productoId)
   {
       
            $detalleContrato           =  sfContext::getInstance()->getUser()->getAttribute('s_agregarContrato',null);

            if($detalleContrato!=null)
            {
                foreach($detalleContrato as $row)
                {
                    $moneda = 1 ;
                    if($row["monedaBanco"]=="soles"){$moneda=1;}
                    if($row["monedaBanco"]=="dolares"){$moneda=2;}                      
                    $detalleContrato= new ContratoProducto();
                    $detalleContrato->setIdProducto($productoId);
                    $detalleContrato->setProveedorId($row['proveedorId']);                    
                    $detalleContrato->setMonedaId($moneda);
                    $detalleContrato->setNumeroContrato($row['numerocontrato']);
                    $detalleContrato->setMonto($row['monto']);
                    $detalleContrato->setTipoCambio($row['tipocambio']);
                    $detalleContrato->save();
                }
                sfContext::getInstance()->getUser()->setAttribute('s_agregarContrato',null);
            }
   }



   public function editarProducto($arrayParam)
   {
      $arrayRespuesta =  array("success"=>false,"mensaje"=>"Error al editar Producto","objecto"=>null,"code"=>602);
        try 
        {
                $sessionNameContrato="s_agregarContratoEditar";
                $s_eliminar_contrato="s_eliminarContratoEditar";
                $coneccion   = Propel::getConnection();
                $coneccion->beginTransaction();
                $producto = ProductoPeer::retrieveByPK($arrayParam['id']);
                if(is_object($producto))
                {
                 
                    if($arrayParam['agenciaId']!=$producto->getAgenciaId());
                    {
                      $codigo = $this->generarCodigoProducto($arrayParam['agenciaId']);
                      $producto->setCodigo($codigo);  
                    }
                    
                
                    $producto->setAgenciaId($arrayParam['agenciaId']);
                    $producto->setDescripcion($arrayParam['descripcion']);
                    $producto->setClienteId($arrayParam['clienteId']);                
                    $producto->setItemAutogetionable($arrayParam['itemComisionAuto']);
                    $producto->setItemComision($arrayParam['ckComision']);
                    $producto->setCkComisionAutogestionable($arrayParam['ckComisionAuto']);      
                    $producto->setItemPorcentaje($arrayParam['itemPorcentaje']);
                    $producto->setSeFactura($arrayParam['seFactura']);
                    $producto->setItemFee($arrayParam['itemFee']);
                    $producto->setCkComisionTradicional($arrayParam['ckComisionTradicional']);
                    $producto->setComisionTradicional($arrayParam['txtComisionTrad']);
                    $producto->setComisionAutogestionable($arrayParam['txtComisionAuto']);
                    $producto->setValorFee($arrayParam['valorFee']);
                    $producto->setMonedaId($arrayParam['monedaId']);
                    $producto->setTcRef($arrayParam['tref']);
                    $producto->setCostoClic($arrayParam['costoClic']);
                    $producto->setHoras($arrayParam['horas']);
                    $producto->setCostoVista($arrayParam['costoVista']);
                    $producto->setCostoMilImpresiones($arrayParam['costoMilImpresiones']);
                    $producto->setPatrocinio($arrayParam['patrocinio']);                    
                    $producto->setCostoPlead($arrayParam['costoPlead']);
                    $producto->setCostoPa($arrayParam['costoPa']);
                    $producto->setEstado($arrayParam['estado']);
                    
                    $producto->save();

                    $this->editarDetalleContrato($sessionNameContrato,$producto->getId());
                    $this->eliminarDetalleContrato($s_eliminar_contrato);

                }
                
                
                
                $coneccion->commit(); 
                $arrayRespuesta['success'] = true;                       
                $arrayRespuesta['mensaje']  = "Exito";
                Propel::close();
        }
        catch (Exception $exc) 
        {

              $coneccion->rollBack();
              Propel::close();
              $arrayRespuesta['mensaje'] = $exc->getMessage();
              $arrayRespuesta['code']    = 601;
              print_r($exc->getMessage());
              return $arrayRespuesta;
        }

         return $arrayRespuesta;  
   }
   
   public function  eliminarDetalleContrato($sessionName)
   {
      $arrayRespuesta =  array("success"=>false,"mensaje"=>"No existe detalle","objecto"=>null,"code"=>603);
     $detalleContrato= sfContext::getInstance()->getUser()->getAttribute($sessionName,null);

     if($detalleContrato!=null)
     {
        foreach($detalleContrato as $row)
        {
                try
                {
                    $detalle=ContratoProductoPeer::retrieveByPK($row['id']);
                    if(is_object($detalle))
                    {
                        $detalle->delete();
                    }

                } catch (Exception $e)
                {
                    $arrayRespuesta['mensaje'] = $e->getMessage();
                    $arrayRespuesta['code']    = 601;
                    return $arrayRespuesta;
                }
        }
     }
     sfContext::getInstance()->getUser()->setAttribute($sessionName, null);
     return $arrayRespuesta;

   }




   public function editarDetalleContrato($sessionName,$productoId)
   {
       $arrayRespuesta   =  array("success"=>false,"mensaje"=>"No existe detalle","objecto"=>null,"code"=>603);
       $detalleContrato  =  sfContext::getInstance()->getUser()->getAttribute($sessionName,null);

       if($detalleContrato!=null)
       {
           foreach ($detalleContrato as $row)
           {
               try 
               {
                   $detalleContrato= ContratoProductoPeer::retrieveByPK($row['id']);
                   if(!is_object($detalleContrato))
                   {
                       $detalleContrato= new ContratoProducto();
                   }
                   
                   $moneda = 1 ;
                   if($row["monedaBanco"]=="soles"){$moneda=1;}
                   if($row["monedaBanco"]=="dolares"){$moneda=2;}  
                   $detalleContrato->setIdProducto($productoId);
                   $detalleContrato->setProveedorId($row['proveedorId']);                    
                   $detalleContrato->setMonedaId($moneda);
                   $detalleContrato->setNumeroContrato($row['numerocontrato']);
                   $detalleContrato->setMonto($row['monto']);
                   $detalleContrato->setTipoCambio($row['tipocambio']);
                   $detalleContrato->save();
                   
                   $arrayRespuesta['success'] = true;
                   $arrayRespuesta['mensaje']  = "Exito";
               }
               catch(Exception $e)
               {
                    $arrayRespuesta['mensaje'] = $e->getMessage();
                    $arrayRespuesta['code']    = 601;
                    return $arrayRespuesta;
               }
           }
        }
        else
        {
            $arrayRespuesta['success'] = true;
            $arrayRespuesta['mensaje']  = "Exito (No session)";
        }
        sfContext::getInstance()->getUser()->setAttribute($sessionName, null);
        return $arrayRespuesta;
   }


   public function obtenerProduto($idProduto)
    {
        $arrayRespuesta =  array("success"=>false,"mensaje"=>"Producto no encontrado","objecto"=>null,"code"=>601);
        
        /* Obtengo el Cliente */
        $productoBean = ProductoPeer::retrieveByPK($idProduto);
        if(is_object($productoBean))
        {           
            $this->crearSessionDetalleContrato($productoBean->getId());
            $arrayRespuesta['success'] = true;
            $arrayRespuesta['mensaje'] = "exito";
            $arrayRespuesta['objecto'] = $productoBean;             
        }
        return $arrayRespuesta;
    }
    
    
    public function listaDetaleArchivos($idProducto)
    {
        $criteria = new Criteria();
        $criteria->add(ArchivosProductosPeer::ID_PRODUCTO, $idProducto);
        return ArchivosProductosPeer::doSelect($criteria);
        
    }
    
    function crearSessionDetalleContrato($idProducto)
    {
        
        $nombreSession = "s_agregarContratoEditar";
        sfContext::getInstance()->getUser()->setAttribute($nombreSession,null);
        $criteria = new Criteria();
        $criteria->add(ContratoProductoPeer::ID_PRODUCTO,$idProducto);
        $listaDetalle= ContratoProductoPeer::doSelect($criteria);
       
        foreach ($listaDetalle as $row)
        {
            
            if($row->getMonedaId()==1){$moneda="soles";}
            if($row->getMonedaId()==2){$moneda="dolares";}
            
            $arrayParametro   = array(
            "id"                => $row->getId(),
            "proveedorId"      => $row->getProveedorId(),
            "proveedorName"    => $row->getProveedor()->getRazonSocial(),
            "numerocontrato"   => $row->getNumeroContrato(),
            "monto"            => $row->getMonto(),
            "monedaBanco"      => $moneda,  
            "tipocambio"       => $row->getTipoCambio()
            );
            $this->agregarContratoProducto($nombreSession, $arrayParametro,'editar');
        }
    }
    
    public function agregarContratoProducto($nombreSession,$arrayParametro,$type="crear")
    {
       
        $proveedorId    = $arrayParametro['proveedorId'];
        $proveedorName  = $arrayParametro['proveedorName'];
        $numerocontrato = $arrayParametro['numerocontrato'];
        $monto          = $arrayParametro['monto'];
        $monedaBanco    = $arrayParametro['monedaBanco'];
        $tipocambio     = $arrayParametro['tipocambio'];
        
        if($numerocontrato!="" && $monto!="" && $tipocambio !="")
        {
            $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
            if($type=="crear")
            {
                $id   = 1;
                $repetido = false;
                if($list!=null)
                {
                    $result   = array_reverse($list);
                    $id       = $result[0]['id']+1;
                }
                if($repetido==false)
                {
                    $newArray = array("id"=>$id,"proveedorId"=>$proveedorId,"proveedorName"=>$proveedorName,"numerocontrato"=>$numerocontrato,"monto"=>$monto,"monedaBanco"=>$monedaBanco,"tipocambio"=>$tipocambio);
                    $list[]   = $newArray;
                } 
            }
            else
            {
                    $id             = $arrayParametro['id']; 
                    $newArray = array("id"=>$id,"proveedorId"=>$proveedorId,"proveedorName"=>$proveedorName,"numerocontrato"=>$numerocontrato,"monto"=>$monto,"monedaBanco"=>$monedaBanco,"tipocambio"=>$tipocambio);
                    $list[]   = $newArray;
            }
            
            sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
        }
    }

  public function editarContratodetalle($nombreSession,$arrayParametro)
   {
        $proveedorId    = $arrayParametro['proveedorId'];
        $proveedorName  = $arrayParametro['proveedorName'];
        $numerocontrato = $arrayParametro['numerocontrato'];
        $monto          = $arrayParametro['monto'];
        $monedaBanco    = $arrayParametro['monedaBanco'];
        $tipocambio     = $arrayParametro['tipocambio'];

        $list           =  sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $clave          = -1;
          if($list!=null)
        {
              while ($row = current($list))
              {
                 if($row['id']==$arrayParametro["idDetalle"])
                 {
                    $array = $row;
                    $clave = key($list);
                    break;
                 }
                 next($list);
              }

              if($clave!=-1)
              {
                  
                  $list[$clave]  =  array("id"=>$array['id'],"proveedorId"=>$proveedorId,"proveedorName"=>$proveedorName,"numerocontrato"=>$numerocontrato,"monto"=>$monto,"monedaBanco"=>$monedaBanco,"tipocambio"=>$tipocambio);
                  sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
                  return true;
              }
        }
        return false;

    






   }


    public function eliminarContratoDetalle($nombreSession,$id)
    {

       $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
       $clave          = -1;
       if($list!=null)
       {
            while ($row = current($list))
            {
                if ($row['id']==$id)
                {
                    $clave =  key($list);
                    break;
                }
                next($list);
            }
            if($clave!=-1)
            {
                unset($list[$clave]);
                if(count($list)==0)
                {
                    sfContext::getInstance()->getUser()->setAttribute($nombreSession,null);
                }
                else
                {
                   sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
                }
               return true;
            }
       }
       return false;



    }


   public function eliminarContratoEditar($nombreSession,$id)
    {
        $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $newArray = array("id"=>$id);
        $list[]   = $newArray;
        sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
        return true;


    }
    
    /* Este codigo se genera de acuerdo a la agencia*/
    public function generarCodigoProducto($agenciaId)
    {        
        $criteria = new Criteria();
        $criteria->add(ProductoPeer::AGENCIA_ID,$agenciaId);
        $cantidad = ProductoPeer::doCount($criteria);
        return sprintf("%03d", $cantidad+1); ;
    }

    

}

?>
